import MarkdownIt from 'markdown-it'
import hljs from 'highlight.js'
import 'highlight.js/styles/atom-one-dark.css'

// 语言映射表，将简写转换为完整名称
const languageMap: Record<string, string> = {
  'js': 'JavaScript',
  'ts': 'TypeScript',
  'py': 'Python',
  'cpp': 'C++',
  'c': 'C',
  'java': 'Java',
  'go': 'Go',
  'rs': 'Rust',
  'php': 'PHP',
  'rb': 'Ruby',
  'sh': 'Shell',
  'bash': 'Bash',
  'sql': 'SQL',
  'html': 'HTML',
  'css': 'CSS',
  'scss': 'SCSS',
  'json': 'JSON',
  'xml': 'XML',
  'yaml': 'YAML',
  'yml': 'YAML',
  'md': 'Markdown',
  'vue': 'Vue',
  'jsx': 'JSX',
  'tsx': 'TSX'
}

// 统一的markdown解析器配置
const md: MarkdownIt = new MarkdownIt({
  html: false,
  linkify: true,
  typographer: true,
  highlight: function (str: string, lang: string): string {
    const displayLang = languageMap[lang] || lang || 'Code'
    
    if (lang && hljs.getLanguage(lang)) {
      try {
        const highlighted = hljs.highlight(str, { language: lang }).value
        return `<pre class="code-block" data-language="${displayLang}"><code>${highlighted}</code></pre>`
      } catch (error) {
        console.error('语法高亮出错:', error)
        return `<pre class="code-block" data-language="${displayLang}"><code>${md.utils.escapeHtml(str)}</code></pre>`
      }
    }
    return `<pre class="code-block" data-language="${displayLang}"><code>${md.utils.escapeHtml(str)}</code></pre>`
  }
})

/**
 * 解析Markdown内容为HTML
 */
export function parseMarkdown(content: string): string {
  return md.render(content)
}

// 导出markdown实例供其他地方使用
export { md }